package week2;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * 697. 数组的度
 * https://leetcode-cn.com/problems/degree-of-an-array/
 *
 * 执行结果：  通过  显示详情
 *
 * 添加备注
 * 执行用时：12 ms, 在所有 Java 提交中击败了87.87% 的用户
 * 内存消耗：42.5 MB, 在所有 Java 提交中击败了73.73% 的用户
 * 通过测试用例：89 / 89
 * 炫耀一下:
 *
 *
 */
public class Week2DegreeOfAnArray {

    public int findShortestSubArray(int[] nums) {
        Map<Integer, int[]> map = new HashMap<Integer, int[]>();
        int length = nums.length;
        for(int size = 0; size < length; size++) {
            int key = nums[size];
            if(map.containsKey(key)) {
                map.get(key)[0]++;
                map.get(key)[2] = size;
            } else {
                map.put(key, new int[]{1, size, size});
            }
        }

        int maxNum = 0;
        int minLength = 0;
        for(Map.Entry<Integer, int[]> entry : map.entrySet()) {
            int[] array = entry.getValue();
            if(maxNum < array[0]) {
                maxNum = array[0];
                minLength = array[2] - array[1] + 1;
            } else if(maxNum == array[0]) {
                if(minLength > array[2] - array[1] + 1) {
                    minLength = array[2] - array[1] + 1;
                }
            }
        }
        return minLength;
    }
}
